package vista;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;

import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;


import javax.swing.JDialog;

import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import javax.swing.border.BevelBorder;





import modelo.Ciudad;
import modelo.Cliente;

import modelo.Estado;

import modelo.Status;
import modelo.dao.Servidor;

import util.Utilidades;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class DlgCliente extends javax.swing.JDialog {

	{
		//Set Look & Feel
		try {
			javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

	private JTextField txtNombre;
	private JLabel lblCiudad;
	private JScrollPane jScrollPane1;
	private JTextArea txtaDireccion;
	private JLabel lblTelefono;
	private JTextField txtCodTelefono;
	private JTextField txtTelefono;
	private JLabel lblDireccion;
	private JLabel lblCalle;
	private JComboBox cbCiudad;
	private JComboBox cbEstado;
	private JLabel lblEstado;
	private JPanel jPanel1;
	private JLabel jLabel1;
	private JButton btAceptar;
	private JButton btSalir;
	private JLabel lblNombre;
	private JLabel lblCodigo;
	private JTextField txtCodigo;
	private ComboBoxModel cbemod;
	private ComboBoxModel cbcmod;

	/**
	* Auto-generated main method to display this JDialog
	*/
	/*public static void main(String[] args) {
		//com.birosoft.liquid.LiquidLookAndFeel;
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				JFrame frame = new JFrame();
				DlgCliente inst = new DlgCliente(frame);
				inst.setVisible(true);
			}
		});
	}*/
	
	public DlgCliente(JDialog dialog) {
		super(dialog);
		initGUI();
	}
	
	private void initGUI() {
		try {
			{
				getContentPane().setLayout(null);
				this.setTitle("Cliente");
				{
					txtCodigo = new JTextField();
					getContentPane().add(txtCodigo);
					txtCodigo.setBounds(104, 10, 154, 28);
					txtCodigo.setEnabled(false);
				}
				{
					lblCodigo = new JLabel();
					getContentPane().add(lblCodigo);
					lblCodigo.setText("Codigo:");
					lblCodigo.setFont(new java.awt.Font("Tahoma",1,11));
					lblCodigo.setBounds(37, 14, 49, 14);
				}
				{
					lblNombre = new JLabel();
					getContentPane().add(lblNombre);
					lblNombre.setText("Nombre:");
					lblNombre.setBounds(37, 51, 61, 14);
					lblNombre.setFont(new java.awt.Font("Tahoma",1,11));
				}
				{
					txtNombre = new JTextField();
					getContentPane().add(txtNombre);
					txtNombre.setBounds(104, 47, 231, 28);
				}
				{
					btSalir = new JButton();
					getContentPane().add(btSalir);
					btSalir.setText("Salir");
					btSalir.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Salir.gif")));
					btSalir.setHorizontalTextPosition(JButton.CENTER);
					btSalir.setVerticalTextPosition(JButton.BOTTOM);
					btSalir.setBounds(368, 381, 79, 40);
				}
				{
					btAceptar = new JButton();
					getContentPane().add(btAceptar);
					btAceptar.setText("Aceptar");
					btAceptar.setIcon(new ImageIcon(getClass().getClassLoader().getResource("iconos/Aceptar.png")));
					btAceptar.setHorizontalTextPosition(JButton.CENTER);
					btAceptar.setVerticalTextPosition(JButton.BOTTOM);
					btAceptar.setBounds(271, 381, 79, 40);
				}
				{
					jLabel1 = new JLabel();
					getContentPane().add(jLabel1);
					jLabel1.setText("Nombre:");
					jLabel1.setFont(new java.awt.Font("Tahoma",1,11));
					jLabel1.setBounds(37, 51, 61, 14);
				}
				{
					jPanel1 = new JPanel();
					getContentPane().add(jPanel1);
					jPanel1.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));
					jPanel1.setBounds(37, 170, 381, 167);
					jPanel1.setLayout(null);
					{
						lblEstado = new JLabel();
						jPanel1.add(lblEstado);
						lblEstado.setText("Estado:");
						lblEstado.setFont(new java.awt.Font("Tahoma",1,11));
						lblEstado.setBounds(17, 17, 54, 14);
					}
					
					{
						final ArrayList<Estado> estados=Servidor.estados().consultarEstados();
						cbemod = new DefaultComboBoxModel(estados.toArray());
							
						cbEstado = new JComboBox();
						jPanel1.add(cbEstado);
						cbEstado.setModel(cbemod);
						cbEstado.setBounds(76, 14, 144, 28);
					}
					{
						lblCiudad = new JLabel();
						jPanel1.add(lblCiudad);
						lblCiudad.setText("Ciudad:");
						lblCiudad.setFont(new java.awt.Font("Tahoma",1,11));
						lblCiudad.setBounds(17, 55, 54, 14);
					}
					{
						
						Estado est=(Estado)cbEstado.getSelectedItem();
						ArrayList<Ciudad> ciudades = Servidor.estados().consultarCiudadesPorEstado(est.getCodigo());
						cbcmod = new DefaultComboBoxModel(ciudades.toArray());
						
						
						cbCiudad = new JComboBox();
						jPanel1.add(cbCiudad);
						cbCiudad.setModel(cbcmod);
						cbCiudad.setBounds(76, 52, 144, 28);
					}
					{
						lblCalle = new JLabel();
						jPanel1.add(lblCalle);
						lblCalle.setText("Calle/Avenida:");
						lblCalle.setFont(new java.awt.Font("Tahoma",1,11));
						lblCalle.setBounds(17, 96, 92, 14);
					}
					{
						jScrollPane1 = new JScrollPane();
						jPanel1.add(jScrollPane1);
						jScrollPane1.setBounds(121, 92, 247, 55);
						{
							txtaDireccion = new JTextArea();
							jScrollPane1.setViewportView(txtaDireccion);
							txtaDireccion.setBounds(104, 109, 243, 48);
						}
					}
				}
				{
					lblDireccion = new JLabel();
					getContentPane().add(lblDireccion);
					lblDireccion.setText("DIRECCION:");
					lblDireccion.setFont(new java.awt.Font("Tahoma",1,11));
					lblDireccion.setBounds(37, 144, 76, 14);
				}
				{
					txtTelefono = new JTextField();
					getContentPane().add(txtTelefono);
					txtTelefono.setBounds(172, 91, 126, 28);
					txtTelefono.setToolTipText("cvbcvb");
					txtTelefono.setMaximumSize(new java.awt.Dimension(2147483647, 2147483647));
				}
				{
					txtCodTelefono = new JTextField();
					getContentPane().add(txtCodTelefono);
					txtCodTelefono.setBounds(107, 91, 53, 28);
				}
				{
					lblTelefono = new JLabel();
					getContentPane().add(lblTelefono);
					lblTelefono.setText("Telefono:");
					lblTelefono.setFont(new java.awt.Font("Tahoma",1,11));
					lblTelefono.setBounds(37, 98, 64, 14);
				}
			}
			this.setSize(475, 475);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/*Funcion mostrar: Muestra las pantallas con los formatos y 
	validaciones requeridas*/
	
	DlgCliente dcli=this;
	public void mostrarIncluir(JDialog dialog,String codigo) {
		
		setLocationRelativeTo(null);
		darFormatos();
		txtCodigo.setText(codigo);
		
		btAceptar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(!(Utilidades.campoVacio(dcli, txtNombre, "Nombre") || Utilidades.campoVacio(dcli, txtCodTelefono, "Codigo de Telefono")
						|| Utilidades.campoVacio(dcli, txtTelefono, "Telefono")|| Utilidades.campoVacio(dcli, txtaDireccion, "Calle/Avenida")))
				{   Ciudad ciu=(Ciudad)cbCiudad.getSelectedItem();
				    Cliente cli=Servidor.clientes().agregarCliente(txtCodigo.getText(), txtNombre.getText(), txtaDireccion.getText(), Servidor.estados().consultarCiudadPorCodigo(ciu.getCodigo()), txtCodTelefono.getText()+"-"+txtTelefono.getText(), Status.ACTIVO);
					if(cli!=null)
					{	JOptionPane.showMessageDialog(dcli, "Registro incluido exitosamente","Inclusion",JOptionPane.INFORMATION_MESSAGE);
						dcli.dispose();
					}
					else
						JOptionPane.showMessageDialog(dcli, "EL registro no pudo ser incluido","Inclusion",JOptionPane.ERROR_MESSAGE);
				}
				  
			}
		});

				
		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dcli.dispose();
			}
		});
	
		cbEstado.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				Estado est=(Estado)cbEstado.getSelectedItem();
				ArrayList<Ciudad> ciudades = Servidor.estados().consultarCiudadesPorEstado(est.getCodigo());
				cbcmod = new DefaultComboBoxModel(ciudades.toArray());
				cbCiudad.setModel(cbcmod);
				
			}});
		
		this.setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
	}
	
	public void mostrarModificar(JDialog dialog,final Cliente cli) {
		
		setLocationRelativeTo(null);
		darFormatos();
		llenarDatos(cli);
		
		btAceptar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				if(!(Utilidades.campoVacio(dcli, txtNombre, "Nombre") || Utilidades.campoVacio(dcli, txtCodTelefono, "Codigo de Telefono")
						|| Utilidades.campoVacio(dcli, txtTelefono, "Telefono")|| Utilidades.campoVacio(dcli, txtaDireccion, "Calle/Avenida")))
				{   
					leerDatos(cli);
			
					if(Servidor.clientes().modificarCliente(cli)!=null)
					{	JOptionPane.showMessageDialog(dcli, "Registro modificado exitosamente","Modificacion",JOptionPane.INFORMATION_MESSAGE);
						dcli.dispose();
					}
					else
						JOptionPane.showMessageDialog(dcli, "EL registro no pudo ser modificado","Inclusion",JOptionPane.ERROR_MESSAGE);
				}
				  
			}
		});

				
		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dcli.dispose();
			}
		});
	
		cbEstado.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				Estado est=(Estado)cbEstado.getSelectedItem();
				ArrayList<Ciudad> ciudades = Servidor.estados().consultarCiudadesPorEstado(est.getCodigo());
				cbcmod = new DefaultComboBoxModel(ciudades.toArray());
				cbCiudad.setModel(cbcmod);
				
			}});
		
		this.setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
	}
	
	public void mostrarVer(JDialog dialog,Cliente cliente) {
		
		setLocationRelativeTo(null);
		darFormatos();
		btAceptar.setVisible(false);
		
		llenarDatos(cliente);
		deshabilitar();
        
				
		btSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				dcli.dispose();
			}
		});
		
		this.setModalityType(ModalityType.APPLICATION_MODAL);
		setVisible(true);
	}
	
	//Funciones usadas en la funcion mostrar
	

	
	public void darFormatos(){ 
		
		Utilidades.convertirMayuscula(txtNombre);
		Utilidades.convertirMayuscula(txtaDireccion);
		Utilidades.soloNumeros(txtCodTelefono);
		Utilidades.soloNumeros(txtTelefono);
		Utilidades.limitarCaracteres(txtCodTelefono,4);
		Utilidades.limitarCaracteres(txtTelefono, 7);
		
	}
	
	public void llenarDatos(Cliente cli){
		txtCodigo.setText(cli.getCodigo());
		txtNombre.setText(cli.getNombre());
		
		
		
		String tel[] = cli.getTelefono().split("-");
		txtCodTelefono.setText(tel[0]);
		txtTelefono.setText(tel[1]);
		
		txtaDireccion.setText(cli.getDireccion());
		cbEstado.setSelectedItem(cli.getCiudad().getEstado());
		cbCiudad.setSelectedItem(cli.getCiudad());
	}
	
	public void leerDatos(Cliente cli){
		cli.setCodigo(txtCodigo.getText());
		cli.setNombre(txtNombre.getText());
		cli.setTelefono(txtCodTelefono.getText()+"-"+txtTelefono.getText());
		cli.setDireccion(txtaDireccion.getText());
		Ciudad ciu=(Ciudad)cbCiudad.getSelectedItem();
		cli.setCiudad(ciu);
		
	}
	
	public void deshabilitar(){
		txtCodigo.setEnabled(false);
		txtNombre.setEnabled(false);
		txtCodTelefono.setEnabled(false);
		txtTelefono.setEnabled(false);
		txtaDireccion.setEnabled(false);
		cbEstado.setEnabled(false);
		cbCiudad.setEnabled(false);
	}

}
